/* Zatok - язык программирования текстовых игр
 * (С) 2010 - 2012 Меркулов Матвей Юрьевич
 * Код лицензирован под лицензией GNU LGPL
 * Вы можете прочитать текст лицензии по адресу:
 * http://www.gnu.org/copyleft/lesser.html
 * или прочитать русский перевод по адресу:
 * http://ru.wikisource.org/wiki/GNU_Lesser_General_Public_License
 */

package base.list;

import base.CProject;
import base.function.CObjectFunction;
import base.value.CValue;
import base.value.CValue.CType;
import base.value.userobject.CUserObject;
import java.util.Iterator;
import java.util.LinkedList;

public class CLastObject extends CObjectFunction {
	@Override
	public void Init() {
		AssertParam( 1 );
	}
	
	
	
	@Override
	public CUserObject ToObject() {
		CValue Value = Param[ 0 ].GetValue();
		CType Type  = Value.GetType();
		switch( Type ) {
			case UserObject:
				CUserObject Object = Param[ 0 ].ToObject();
				if( Object.Children.isEmpty() ) Error( "Невозможно получить последний объект пустого объекта" );
				return Object.Children.getLast();
			case Array:
				CValue[] Array = Value.ToArray();
				if( Array.length == 0 ) Error( "Невозможно получить последний объект пустого массива" );
				return Array[ Array.length - 1 ].ToObject();
			case List:
				LinkedList<CValue> List = Value.ToList();
				if( List.size() == 0 ) Error( "Невозможно получить последний объект пустого списка" );
				return List.getLast().ToObject();
		}		
		Error( "Последний объект можно получить только для объекта, массива или списка" );
		return null;
	}
}
